import { http } from "@/utils/http";

// 预约相关类型定义
export interface AppointmentForm {
  mid?: number; // 会员id
  name: string; // 顾客姓名
  mobile: string; // 顾客电话
  date: string; // 预约日期时间 (完整格式: 2025-06-05 15:05:00)
  tid?: string; // 员工id
  pid?: string; // 项目id
  remark?: string; // 备注
  // 前端使用的字段
  startTime?: string; // 开始时间
  endTime?: string; // 结束时间
}

export interface AppointmentDate {
  date: string; // ISO格式: "2025-06-06T23:59:59.000+08:00"
  dayOfWeek: string | number;
  dayOfWeekStr: string; // "今天", "明天", "后天", "周一" 等
}

export interface Employee {
  t_id: string;
  t_name: string;
  t_mobile: string;
  t_sex: string;
  is_can: boolean;
  sex: string;
}

export interface TimeSlot {
  startDate: string; // 格式: "2025-06-06 12:15:00"
  canMakeAppointment: boolean;
}

export interface Project {
  p_id: string;
  p_name: string;
  p_price: string;
  p_duration: string;
  p_status: string;
  p_ctime: string;
  p_etime: string;
}

export interface ApiResult<T = any> {
  code: number;
  msg: string;
  data: T;
}

// 新增预约
export const addAppointment = (data: AppointmentForm) => {
  // 构造符合API要求的数据格式
  const requestData = {
    mid: data.mid,
    name: data.name,
    mobile: data.mobile,
    date: data.date, // 使用完整的日期时间
    tid: data.tid,
    pid: data.pid,
    remark: data.remark
  };

  return http.post<ApiResult>("/admin/order.php?act=add", {
    data: requestData
  });
};

// 获取预约日期
export const getAppointmentDates = () => {
  return http.get<ApiResult<AppointmentDate[]>>(
    "/admin/order.php?act=date_list"
  );
};

// 获取预约员工数据
export const getEmployeeList = (date: string) => {
  return http.post<ApiResult<Employee[]>>(
    "/admin/order.php?act=employee_list",
    {
      data: { date }
    }
  );
};

// 获取预约时间数据
export const getTimeSlots = (date: string) => {
  // 构造符合API要求的日期格式 (YYYY-MM-DD 00:00:00)
  const dateStr = date.includes("T") ? date.split("T")[0] : date.split(" ")[0];
  const requestDate = `${dateStr} 00:00:00`;

  return http.post<ApiResult<TimeSlot[]>>("/admin/order.php?act=time_list", {
    data: { date: requestDate }
  });
};

// 获取项目列表
export const getProjectList = (params?: { name?: string; status?: string }) => {
  return http.post<ApiResult<Project[]>>("/admin/project.php?act=list", {
    data: params
  });
};

// 获取预约列表（日历事件数据）
// 注意：根据API文档，暂时没有找到专门的预约列表接口
// 这里使用假设的接口路径，如果后端提供了相应接口，可以直接使用
export const getAppointmentList = () => {
  // 假设的预约列表API接口，实际使用时需要确认接口地址
  // 可能的接口路径: /admin/order.php?act=list

  console.warn("预约列表接口需要后端提供支持，当前使用模拟数据");

  // 如果后端有对应接口，可以使用以下代码：
  // return http.post<ApiResult<any[]>>("/admin/order.php?act=list", { data: params });

  // 暂时返回空数据，让组件使用fallback模拟数据
  return Promise.resolve({
    code: 0, // 返回0表示接口未实现，让组件使用模拟数据
    msg: "接口暂未实现",
    data: []
  });
};
